#!/bin/bash

cd target

# 自动获取当前目录下第一个.jar文件作为应用（只获取文件名，不包含路径）
JAR_FILE=$(find . -maxdepth 1 -name "*.jar" -type f | head -n 1)

# 检查是否找到了jar文件
if [ -z "$JAR_FILE" ]; then
    echo "错误: 当前目录下未找到任何.jar文件"
    exit 1
fi

# 提取纯文件名，去除路径前缀[7](@ref)[8](@ref)
JAR_FILE=$(basename "$JAR_FILE")
echo "目标应用: $JAR_FILE"

# 检查进程是否运行
is_exist() {
    # 使用grep匹配完整的jar文件名，避免误匹配[2](@ref)
    pid=$(ps -ef | grep "$JAR_FILE" | grep -v grep | awk '{print $2}')
    if [ -z "$pid" ]; then
        return 1  # 进程不存在
    else
        return 0  # 进程存在
    fi
}

# 停止进程函数
stop_app() {
    echo "正在停止 $JAR_FILE ..."
    kill $pid
    sleep 3

    # 检查是否成功停止，如果未停止则强制终止
    is_exist
    if [ $? -eq 0 ]; then
        echo "普通停止失败，尝试强制终止..."
        kill -9 $pid
        sleep 2
    fi

    is_exist
    if [ $? -eq 0 ]; then
        echo "停止失败，进程仍在运行 PID: $pid"
        return 1
    else
        echo "应用已成功停止"
        return 0
    fi
}

# 启动进程函数
start_app() {
    echo "正在启动 $JAR_FILE ..."
    nohup java -jar "$JAR_FILE" > app.log 2>&1 &
    sleep 5  # 等待启动完成

    is_exist
    if [ $? -eq 0 ]; then
        echo "应用启动成功，PID: $pid"
    else
        echo "应用启动失败，请检查日志文件 app.log"
    fi
}

# 主逻辑
echo "检查应用状态..."
is_exist

if [ $? -eq 0 ]; then
    echo "应用正在运行，PID: $pid"
    stop_app
    if [ $? -eq 0 ]; then
        start_app
    fi
else
    echo "应用未在运行"
    start_app
fi
